<template>
  <div class="">
    <div class="module-card">
      <h3>题目描述：</h3>
      <div>{{ title }}</div>
    </div>
    <div class="module-card">
      <h3>题目要求：</h3>
      <div
        :class="{ 'margin-top': index !== 0 }"
        v-for="(item, index) in detail"
        :key="index"
      >
        <div class="">{{ item.des }}</div>
        <div v-if="item.example" class="">{{ item.example }}</div>
      </div>
    </div>
    <div class="module-card">
      <input v-model="valueStr" @change="handleChange" />
      <div class="margin-top">结果是：</div>
      <div>{{ resultInfo }}</div>
    </div>
  </div>
</template>

<script>
export default {
  props: {},
  components: {},
  data() {
    return {
      title: `现在有一队小朋友，他们高矮不同，我们以正整数数组表示这一队小朋友的身高，如数组{5,3,1,2,3}。我们现在希望小朋友排队，以“高”“矮”“高”“矮”顺序排列，每一个“高”位置的小朋友要比相邻的位置高或者相等；每一个“矮”位置的小朋友要比相邻的位置矮或者相等；要求小朋友们移动的距离和最小，第一个从“高”位开始排，输出最小移动距离即可。例如，在示范小队{5,3,1,2,3}中，{5, 1, 3, 2, 3}是排序结果。{5, 2, 3, 1, 3} 虽然也满足“高”“矮”“高”“矮”顺序排列，但小朋友们的移动距离大，所以不是最优结果。移动距离的定义如下所示：第二位小朋友移到第三位小朋友后面，移动距离为1，若移动到第四位小朋友后面，移动距离为2；`,
      detail: [
        {
          des: "输入描述",
          example:
            "排序前的小朋友,以英文空格的正整数：4 3 5 7 8。注：小朋友<100个",
        },
        {
          des: "输出描述",
          example:
            "排序后的小朋友，以英文空格分割的正整数：4 3 7 5 8。出现非法参数情况，返回空数组",
        },
      ],
      valueStr: "5 3 1 2 3", // 输入值
      resultInfo: "",
    };
  },
  created() {},
  mounted() {
    this.handleChange();
  },
  beforeDestroy() {},
  computed: {},
  watch: {},
  methods: {
    // 限制 高 开头时
    handleChange() {
      this.resultInfo = "";
      const valueStr = this.valueStr;
      const valueArr = valueStr.split(" ");
      let isError = false;
      for (let i = valueArr.length - 1; i >= 0; i--) {
        const v = valueArr[i];
        if (isNaN(v)) {
          isError = true;
          break;
        }
        valueArr[i] = Number(valueArr[i]);
      }
      if (isError) {
        console.log("ERROR");
        this.resultInfo = [];
        return;
      }
      if (valueArr.length < 3) {
        this.resultInfo = valueArr.toString();
        return;
      }
      if (valueArr.length >= 100) {
        this.resultInfo = [];
        console.log("ERROR");
        return;
      }
      // 判断i与i+1的大小先后即可
      for (let i = 0; i < valueArr.length - 1; i++) {
        if (i === valueArr.length - 1) continue;
        const vC = valueArr[i];
        const vN = valueArr[i + 1];
        // 先大后小
        if (i % 2 === 0 && vC < vN) {
          valueArr[i] = vN;
          valueArr[i + 1] = vC;
        }
        if (i % 2 === 1 && vC > vN) {
          valueArr[i] = vN;
          valueArr[i + 1] = vC;
        }
      }
      this.resultInfo = valueArr.join(" ");
    },
    // 不限制 高还是矮 开头时
    handleChangeQueue1() {
      this.resultInfo = "";
      const valueStr = this.valueStr;
      const valueArr = valueStr.split(" ");
      let isError = false;
      for (let i = valueArr.length - 1; i >= 0; i--) {
        const v = valueArr[i];
        if (isNaN(v)) {
          isError = true;
          break;
        }
        valueArr[i] = Number(valueArr[i]);
      }
      if (isError) {
        console.log("ERROR");
        this.resultInfo = [];
        return;
      }
      if (valueArr.length < 3) {
        this.resultInfo = valueArr.toString();
        return;
      }
      if (valueArr.length >= 100) {
        this.resultInfo = [];
        console.log("ERROR");
        return;
      }
      const arr1 = [...valueArr];
      let arr1MoveNum = 0;
      const arr2 = [...valueArr];
      let arr2MoveNum = 0;
      // 判断i与i+1的大小先后即可
      for (let i = 0; i < arr1.length - 1; i++) {
        if (i === arr1.length - 1) continue;
        const vC = arr1[i];
        const vN = arr1[i + 1];
        // 先小后大
        if (i % 2 === 0 && vC > vN) {
          arr1[i] = vN;
          arr1[i + 1] = vC;
          arr1MoveNum++;
        }
        if (i % 2 === 1 && vC < vN) {
          arr1[i] = vN;
          arr1[i + 1] = vC;
          arr1MoveNum++;
        }
      }
      for (let i = 0; i < arr2.length - 1; i++) {
        if (i === arr2.length - 1) continue;
        const vC = arr2[i];
        const vN = arr2[i + 1];
        // 先大后小
        if (i % 2 === 0 && vC < vN) {
          arr2[i] = vN;
          arr2[i + 1] = vC;
          arr2MoveNum++;
        }
        if (i % 2 === 1 && vC > vN) {
          arr2[i] = vN;
          arr2[i + 1] = vC;
          arr2MoveNum++;
        }
      }
      console.log(valueArr, arr1, arr2);
      // 取移动次数最小的
      if (arr1MoveNum >= arr2MoveNum) {
        this.resultInfo = arr2.join(" ");
      } else {
        this.resultInfo = arr1.join(" ");
      }
    },
  },
};
</script>

<style lang="less"></style>

<style lang="less" scoped>
.module-card {
  > h3 {
    font-weight: bolder;
  }
}
.margin-top {
  margin-top: 20px;
}
</style>
